package com.Oct_Twelve;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 817. 链表组件
 *给定链表头结点 head，该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums，该列表是上述链表中整型值的一个子集。
 *
 * 返回列表 nums 中组件的个数，这里对组件的定义为：链表中一段最长连续结点的值（该值必须在列表 nums 中）构成的集合。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/linked-list-components
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/10/12 15:19
 */

public class Solution817 {


    public int numComponents(ListNode head, int[] nums) {
        Set<Integer> set=new HashSet<>();
        for (int num:nums)
        {
            set.add(num);
        }
        int cnt=0;
        while (head !=null)
        {
            if (set.contains(head.val))
            {
                while(head!=null&&set.contains(head.val)) head=head.next;
                cnt++;
            }else
            {
                head=head.next;
            }
        }
        return cnt;
    }



    public static class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

}
